import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '@/views/Login'  // 登录页
import Home from '@/views/Home'
// 引入学生管理页面
import StudentList from '@/views/student/StudentList'
// 引入理论知识页面
import TheoryList from '@/views/theory/TheoryList'
// 引入题库页面
import QuestionList from '@/views/question/QuestionList'
// 引入WPS页面
import WpsList from '@/views/wps/WpsList'
// 引入课程管理页面
import CourseList from '@/views/course/CourseList'
// 引入虚拟教室页面
import VirtualClassroom from '@/views/virtualClassroom/VirtualClassroom'
// 引入试卷页面
import ExamList from '@/views/exam/ExamList'
// 引入个人信息页面
import Profile from '@/views/profile/Profile'
// 引入教师管理页面
import TeacherList from '@/views/teacher/TeacherList'

Vue.use(VueRouter)

const routes = [
  {
    path: '/login',
      name: 'Login',
      component: Login,
      meta: { title: '登录' }
  },
  {
      path: '/',
      name: 'Home',
      component: Home,
      meta: { title: '学生管理', requireAuth: true }, // 首页标题改为“学生管理”
      redirect: '/studentList', // 根路径默认重定向到学生管理页
      children: [
        // 学生管理路由
        {
          path: 'studentList',
          name: 'StudentList',
          component: StudentList,
          meta: { title: '学生管理' }
        },
        // 教师管理路由
        {
          path: 'teacher',
          name: 'TeacherList',
          component: TeacherList,
          meta: { title: '教师管理', requireAdmin: true }
        },
        // 新增理论知识路由
        {
          path: 'theory',
          name: 'TheoryList',
          component: TheoryList,
          meta: { title: '理论知识管理' }
        },
        // 新增题库路由
        {
          path: 'question-bank',
          name: 'QuestionList',
          component: QuestionList,
          meta: { title: '题库管理' }
        },
        // 新增WPS路由
        {
          path: 'wps',
          name: 'WpsList',
          component: WpsList,
          meta: { title: '焊接WPS管理' }
        },
        // 课程管理路由
        {
          path: 'courses',
          name: 'CourseList',
          component: CourseList,
          meta: { title: '课程管理' }
        },
        // 虚拟教室路由
        {
          path: 'virtual-classroom',
          name: 'VirtualClassroom',
          component: VirtualClassroom,
          meta: { title: '虚拟教室' }
        },
        // 试卷路由
        {
          path: 'exam',
          name: 'ExamList',
          component: ExamList,
          meta: { title: '试卷管理' }
        },
        // 个人信息路由
        {
          path: 'profile',
          name: 'Profile',
          component: Profile,
          meta: { title: '个人信息' }
        },
      ]
    },
  {
      path: '*',
      redirect: '/'  // 404页面重定向到首页
    }
]

const router = new VueRouter({
  routes
})

// 路由守卫：判断是否登录
router.beforeEach(async (to, from, next) => {
  // 设置页面标题
  if (to.meta.title) {
    document.title = to.meta.title + ' - 焊接学习平台'
  }
  
  // 获取token
  const token = localStorage.getItem('token')
  
  // 如果要访问登录页，直接放行
  if (to.path === '/login') {
    // 如果已登录，跳转到首页
    if (token) {
      next('/')
    } else {
      next()
    }
    return
  }
  
  // 如果没有token，跳转到登录页
  if (!token) {
    next({
      path: '/login',
      query: { redirect: to.fullPath } // 保存原本要访问的路径，登录后可跳转回去
    })
    return
  }
  
  // 如果有token但没有用户信息，获取用户信息
  const userInfo = localStorage.getItem('userInfo')
  if (!userInfo) {
    try {
      // 动态导入 api 模块以避免循环依赖
      const api = (await import('@/api')).default
      const res = await api.admin.getAccountDetail()
      if (res.code === 200 && res.data) {
        localStorage.setItem('userInfo', JSON.stringify(res.data))
        // 触发全局事件通知其他组件更新用户信息
        window.dispatchEvent(new CustomEvent('userInfoUpdated'))
      }
    } catch (error) {
      // 获取失败，清除token并跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
      return
    }
  }
  
  // 检查是否需要管理员权限
  if (to.meta.requireAdmin) {
    const currentUserInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
    if (!currentUserInfo.is_admin) {
      // 不是管理员，提示并跳转到首页
      alert('您没有权限访问该页面')
      next('/')
      return
    }
  }
  
  // 放行
  next()
})

export default router
